1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.google.common.collect;
18
19 import static java.util.Arrays.asList;
20
21 import com.google.common.annotations.GwtCompatible;
22 import com.google.common.annotations.GwtIncompatible;
23 import com.google.common.collect.testing.features.CollectionFeature;
24 import com.google.common.collect.testing.features.CollectionSize;
25 import com.google.common.collect.testing.google.MultisetFeature;
26 import com.google.common.collect.testing.google.MultisetTestSuiteBuilder;
27 import com.google.common.collect.testing.google.TestStringMultisetGenerator;
28 import com.google.common.testing.SerializableTester;
29
30 import junit.framework.Test;
31 import junit.framework.TestCase;
32 import junit.framework.TestSuite;
33
34 import java.io.Serializable;
35 import java.util.Arrays;
36
37
38
39
40
41
42
43 @GwtCompatible(emulated = true)
44 public class HashMultisetTest extends TestCase {
45
46 @GwtIncompatible("suite")
47 public static Test suite() {
48 TestSuite suite = new TestSuite();
49 suite.addTest(MultisetTestSuiteBuilder.using(hashMultisetGenerator())
50 .withFeatures(CollectionSize.ANY,
51 CollectionFeature.FAILS_FAST_ON_CONCURRENT_MODIFICATION,
52 CollectionFeature.ALLOWS_NULL_VALUES,
53 CollectionFeature.SERIALIZABLE,
54 CollectionFeature.GENERAL_PURPOSE,
55 MultisetFeature.ENTRIES_ARE_VIEWS)
56 .named("HashMultiset")
57 .createTestSuite());
58 suite.addTestSuite(HashMultisetTest.class);
59 return suite;
60 }
61
62 private static TestStringMultisetGenerator hashMultisetGenerator() {
63 return new TestStringMultisetGenerator() {
64 @Override protected Multiset<String> create(String[] elements) {
65 return HashMultiset.create(asList(elements));
66 }
67 };
68 }
69
70 public void testCreate() {
71 Multiset<String> multiset = HashMultiset.create();
72 multiset.add("foo", 2);
73 multiset.add("bar");
74 assertEquals(3, multiset.size());
75 assertEquals(2, multiset.count("foo"));
76 }
77
78 public void testCreateWithSize() {
79 Multiset<String> multiset = HashMultiset.create(50);
80 multiset.add("foo", 2);
81 multiset.add("bar");
82 assertEquals(3, multiset.size());
83 assertEquals(2, multiset.count("foo"));
84 }
85
86 public void testCreateFromIterable() {
87 Multiset<String> multiset
88 = HashMultiset.create(Arrays.asList("foo", "bar", "foo"));
89 assertEquals(3, multiset.size());
90 assertEquals(2, multiset.count("foo"));
91 }
92
93 @GwtIncompatible("SerializableTester")
94 public void testSerializationContainingSelf() {
95 Multiset<Multiset<?>> multiset = HashMultiset.create();
96 multiset.add(multiset, 2);
97 Multiset<Multiset<?>> copy = SerializableTester.reserialize(multiset);
98 assertEquals(2, copy.size());
99 assertSame(copy, copy.iterator().next());
100 }
101
102 @GwtIncompatible("Only used by @GwtIncompatible code")
103 private static class MultisetHolder implements Serializable {
104 public Multiset<?> member;
105 MultisetHolder(Multiset<?> multiset) {
106 this.member = multiset;
107 }
108 private static final long serialVersionUID = 1L;
109 }
110
111 @GwtIncompatible("SerializableTester")
112 public void testSerializationIndirectSelfReference() {
113 Multiset<MultisetHolder> multiset = HashMultiset.create();
114 MultisetHolder holder = new MultisetHolder(multiset);
115 multiset.add(holder, 2);
116 Multiset<MultisetHolder> copy = SerializableTester.reserialize(multiset);
117 assertEquals(2, copy.size());
118 assertSame(copy, copy.iterator().next().member);
119 }
120
121
122
123
124
125
126 }